package org.itstack.chain;

/**
 * 抽象审批处理器
 * 实现责任链的基本逻辑，子类只需实现具体的处理逻辑
 */
public abstract class AbstractApprovalHandler implements ApprovalHandler {
    
    private ApprovalHandler nextHandler;
    private String handlerName;
    
    public AbstractApprovalHandler(String handlerName) {
        this.handlerName = handlerName;
    }
    
    @Override
    public void setNextHandler(ApprovalHandler nextHandler) {
        this.nextHandler = nextHandler;
    }
    
    @Override
    public ApprovalHandler getNextHandler() {
        return nextHandler;
    }
    
    @Override
    public String getHandlerName() {
        return handlerName;
    }
    
    /**
     * 处理请求的模板方法
     * 实现责任链的传递逻辑
     */
    @Override
    public ApprovalResult processRequest(ApprovalRequest request) {
        // 当前处理器尝试处理
        ApprovalResult result = handleRequest(request);
        
        if (result != null) {
            // 当前处理器能够处理，返回结果
            return result;
        } else if (nextHandler != null) {
            // 当前处理器无法处理，传递给下一个处理器
            return nextHandler.processRequest(request);
        } else {
            // 没有下一个处理器，返回拒绝结果
            return new ApprovalResult(false, "系统", "没有合适的审批人员处理此申请");
        }
    }
    
    /**
     * 子类需要实现的具体处理逻辑
     * @param request 审批请求
     * @return 审批结果，如果当前处理器无法处理则返回null
     */
    @Override
    public abstract ApprovalResult handleRequest(ApprovalRequest request);
}
